# 声明一个人类
class Person(object):
    # init方法是特殊的方法，在该类被实例化时，会自动调用
    def __init__(self, name):
        self.name = name

    def get_selfname(self):
        return self.name


# 声明一个学生类（继承自人类）
class Student(Person):
    # init方法是特殊的方法，在该类被实例化时，会自动调用
    def __init__(self, name, branch, year):
        Person.__init__(self, name)
        self.branch = branch
        self.year = year

    # 在这里重写掉父类里的get_selfname方法
    def get_selfname(self):
        return "{} student {} and is in {} year.".format(self.name, self.branch, self.year)


# 声明一个教师类（继承自人类）
class Teacher(Person):
    # init方法是特殊的方法，在该类被实例化时，会自动调用
    def __init__(self, name, papers):
        Person.__init__(self, name)
        self.papers = papers

    # 在这里重写掉父类里的get_selfname方法
    def get_selfname(self):
        return "{} teacher {}".format(self.name, ','.join(self.papers))


# 实例化“人类”
person1 = Person('张三')
print(person1.get_selfname())
# 实例化“学生类”
student1 = Student('李四', "CSE", 2005)
print(student1.get_selfname())
# 实例化“教师类”
teacher1 = Teacher('王五', ['C', "C++"])
print(teacher1.get_selfname())
